home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 32 / Mac Magazin and MacEasy Magazine CD - Issue 32.iso / Multimedia / MIDI / MidiChaos_15 Folder / MidiChaos_1.5 / Source / FP_Linear_Scaler < prev    next >
Text File  |  1992-04-24  |  2KB  |  114 lines

  1. \ This class allows simple linear scaling of an FP number.
  2. \
  3. \ Author: Darren Gibbs  Copyright 1990
  4. \ Date: 4/9/90
  5. \
  6. \ MOD: RDG 4/21/90  Added support for concurrent multiple scaling using structs.
  7. \ MOD: RDG 9/19/90  Cleaned up naming conventions.
  8. \ MOD: RDG 9/29/90  Made into an object, 86'ed the struct's.
  9. \ MOD: RDG 10/1/90  Use FP Ivars.
  10.  
  11. ANEW TASK-FP_LINEAR_SCALER
  12.  
  13. FPINIT
  14.  
  15. \ Setup floating point instance variables
  16. : IV.FLPT  ( <name> -- )
  17.     10 create.ivar
  18. ;
  19.  
  20. METHOD PUT.YHI:        METHOD PUT.YLOW:
  21. METHOD GET.YHI:        METHOD GET.YLOW:
  22. METHOD PUT.XHI:        METHOD PUT.XLOW:
  23. METHOD GET.XHI:        METHOD GET.XLOW:
  24. METHOD CALC.SLOPE:  
  25. METHOD SCALE>INT:
  26.  
  27. :CLASS OB.FP_LINEAR_SCALER <SUPER OBJECT
  28.  
  29.     IV.FLPT IV-XLOW
  30.     IV.FLPT IV-XHI
  31.     IV.FLPT IV-YLOW
  32.     IV.FLPT IV-YHI
  33.     IV.FLPT IV-SLOPE
  34.  
  35. :M CALC.SLOPE:  ( -- )  ( -- , calculate and store new slope )
  36. \ slope = (Ylow - Yhi) / (Xlow - Xhi)
  37.     iv-yhi iv-ylow F-
  38.     iv-xhi iv-xlow F-
  39.     F/  iv=> iv-slope     
  40. ;M
  41.  
  42. :M PUT.XLOW:  ( -- )  ( n -- )
  43.     iv=> iv-xlow
  44.     calc.slope: self
  45. ;M
  46.  
  47. :M GET.XLOW:  ( -- )  ( -- n )
  48.     iv-xlow
  49. ;M
  50.  
  51. :M PUT.XHI:  ( -- )  ( n -- )
  52.     iv=> iv-xhi
  53.     calc.slope: self
  54. ;M
  55.  
  56. :M GET.XHI:  ( -- )  ( -- n )
  57.     iv-xhi
  58. ;M
  59.  
  60. :M PUT.YLOW:  ( -- )  ( n -- )
  61.     iv=> iv-ylow
  62.     calc.slope: self
  63. ;M
  64.  
  65. :M GET.YLOW:  ( -- )  ( -- n )
  66.     iv-ylow
  67. ;M
  68.  
  69. :M PUT.YHI:  ( -- )  ( n -- )
  70.     iv=> iv-yhi
  71.     calc.slope: self
  72. ;M
  73.  
  74. :M GET.YHI:  ( -- )  ( -- n )
  75.     iv-yhi
  76. ;M
  77.  
  78. :M STUFF:  ( -- ) ( xlow xhi ylow yhi --  )
  79.     iv=> iv-yhi  iv=> iv-ylow 
  80.     iv=> iv-xhi  iv=> iv-xlow 
  81.     calc.slope: self
  82. ;M
  83.  
  84. :M SCALE:  ( -- )  ( n -- n' , scale n )
  85. \ n' = n * slope + Ylow
  86.     iv-slope F*
  87.     iv-ylow  F+
  88. ;M
  89.  
  90. :M SCALE>INT:  ( -- n' )  ( n -- )
  91.     scale: self   F>I
  92. ;M
  93.  
  94. TEXTROM SCALING-LABLES  
  95.    ," XLOW:  "   ," XHI:   "  
  96.    ," YLOW:  "   ," YHI:   " 
  97.    ," SLOPE: "
  98.  
  99. :M PRINT: ( -- )
  100.     cr name: self cr
  101.     0 scaling-lables type  
  102.     iv-xlow f. cr
  103.     1 scaling-lables type  
  104.     iv-xhi f. cr
  105.     2 scaling-lables type  
  106.     iv-ylow f. cr
  107.     3 scaling-lables type  
  108.     iv-yhi f. cr
  109.     4 scaling-lables type  
  110.     iv-slope f. cr
  111. ;M
  112.  
  113. ;CLASS
  114.